/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package compilador.util;



import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;



/**
 *
 * @author H
 */
public class ManipuladorDeArquivo {
    
    
    private File arquivo;
    private FileReader reader;
    private BufferedReader readerLine;
    private boolean criarArquivoObj;
    
    

    public ManipuladorDeArquivo(File arquivo) {
        
        this.arquivo = arquivo;
        criarArquivoObj = true;
        try {
            this.reader = new FileReader(arquivo);
            this.readerLine = new BufferedReader(reader);
            
        } catch (FileNotFoundException ex) {
            
            Logger.getLogger(ManipuladorDeArquivo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    
    
    public ManipuladorDeArquivo() {
        
        criarArquivoObj = true;
    }
    
    
    
    public String getLinha() {
        
        try {
            //System.out.println(this.readerLine.readLine());
            return this.readerLine.readLine();
        } catch (IOException ex) {
            Logger.getLogger(ManipuladorDeArquivo.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return null;
        
    }
    
    
    
    public void testaGetLinha() {
        
        try {
            while (true) {
                System.out.println(this.readerLine.readLine());
            }
            //return this.readerLine.readLine();
        } catch (IOException ex) {
            Logger.getLogger(ManipuladorDeArquivo.class.getName()).log(Level.SEVERE, null, ex);
        }

        //return null;

    }
    
    

    public void gravarTextoArquivo(File arquivo, String texto) {
        
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter(arquivo));
            bw.write(texto);
            bw.flush();
            
        } catch (IOException ex) {
            Logger.getLogger(ManipuladorDeArquivo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }



    /**
     * Acrescenta String passada como parâmetro ao arquivo passado como
     * parâmetro.
     *
     * @param arquivo
     * @param texto
     */
    public void insereTextoArquivo(String texto) {
        
        try {
            
            BufferedWriter bw;
            if (criarArquivoObj) {
                bw = new BufferedWriter(new FileWriter(arquivo));
                criarArquivoObj = false;
            } else {
                bw = new BufferedWriter(new FileWriter(arquivo, true));
            }
            
            bw.append(texto);
            bw.flush();
            
        } catch (IOException ex) {
            Logger.getLogger(ManipuladorDeArquivo.class.getName()).log(Level.SEVERE, null, ex);
        }        
        
    }
    
    
    
    public void fechaRecursos() {
        try {
            
            this.readerLine.close();
            this.reader.close();
            
            
            
            
            
        } catch (IOException ex) {
            Logger.getLogger(ManipuladorDeArquivo.class
                    .getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    


    public File getArquivo() {
        return arquivo;
    }
    
    
    
    public void setArquivo(File arquivo) {
        this.arquivo = arquivo;
    }
    
    
    
    public FileReader getReader() {
        return reader;
    }
    
    
    
    public void setReader(FileReader reader) {
        this.reader = reader;
    }
    
    
    
    public BufferedReader getReaderLine() {
        return readerLine;
    }
    
    
    
    public void setReaderLine(BufferedReader readerLine) {
        this.readerLine = readerLine;
    }
}
